òɾۿûѧϰʹá
ԭַhttps://www.joinquant.com/post/14756

ԭһ˵ʽ鵽ԭĺ߽ۡ


ԭĲԴ£

# 뺯
from jqdata import *
import pandas as pd
import numpy as np
from sklearn import linear_model
from numpy import mean, std

# ʼ趨ҪĹƱ׼ȵ
def initialize(context):
    # һȫֱ, ҪĹƱ
    context.stock_id='510300.XSHG'
    context.beat_list=[]
    context.count=0
    context.z_beta_r2_list=[]
    context.n_value=18
    context.m_value=400
    # 趨300Ϊ׼
    set_benchmark('000300.XSHG')
    # ̬Ȩģʽ(ʵ۸)
    set_option('use_real_price', True)

def before_trading_start(context):
    advance_high_array=attribute_history(context.stock_id,400,'30m','high')
    advance_low_array=attribute_history(context.stock_id,400,'30m','low')
    
    for i in range(context.n_value,context.m_value):
        
        sliding_windows_high_array=advance_high_array[i-18:i]
        sliding_windows_low_array=advance_low_array[i-18:i]

        reg = linear_model.LinearRegression()
        reg.fit (sliding_windows_low_array,sliding_windows_high_array)
        beat=reg.coef_
        context.beat_list.append(beat)
        
# ÿλʱ(ÿӵһ)
def handle_data(context,data):

    context.count=context.count+1
    if context.count % 30==0:
        high_array=attribute_history(context.stock_id,18,'30m','high')
        low_array=attribute_history(context.stock_id,18,'30m','low')
        reg = linear_model.LinearRegression()
        reg.fit(low_array,high_array)
        beat=reg.coef_
        R_sq=reg.score(low_array,high_array)
    
        beat_z=R_sq*(beat-mean(context.beat_list))/std(context.beat_list)
    
        context.z_beta_r2_list.append(beat_z)
        
        cash = context.portfolio.available_cash
        record(price1=0.7)
        record(name=beat_z)
        record(Price2=-0.7)
        if len(context.z_beta_r2_list)>2:
            if context.z_beta_r2_list[-2]<0.7 and context.z_beta_r2_list[-1]>0.7:
                log.info("  %s" % (context.stock_id))
                order_value(context.stock_id,cash)
            if context.z_beta_r2_list[-2]>-0.7 and context.z_beta_r2_list[-1]<-0.7:
                log.info("  %s" % (context.stock_id))
                order_target_value(context.stock_id, 0)